<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>

<xsl:key name="gl_version" match="gl" use="@version"/>

<!-- parse root node -->
<xsl:template match="/glxml">
<xsl:text>/* 
 * glx11-fnptr-decl.c - function pointer declaration
 */

#include &lt;dogon/gl.h&gt;

</xsl:text>

<xsl:apply-templates select="key('gl_version','1.0')"/>
<xsl:apply-templates select="key('gl_version','1.1')"/>
<xsl:apply-templates select="key('gl_version','1.2')"/>
<xsl:apply-templates select="key('gl_version','1.3')"/>
<xsl:apply-templates select="key('gl_version','1.4')"/>
<xsl:apply-templates select="key('gl_version','1.5')"/>

<xsl:apply-templates select="glext"/>

<xsl:text>/* eof */
</xsl:text>
</xsl:template>



<!-- opengl 1.0 -->
<xsl:template match="key('gl_version','1.0')">
<xsl:text>
/*
 * OpenGL 1.0 API
 */

</xsl:text>

<xsl:apply-templates select="function"/>
</xsl:template>

<!-- opengl 1.1 -->
<xsl:template match="key('gl_version','1.1')">
<xsl:text>
/*
 * OpenGL 1.1 API
 */

</xsl:text>

<xsl:apply-templates select="function"/>
</xsl:template>

<!-- opengl 1.2 -->
<xsl:template match="key('gl_version','1.2')">
<xsl:text>
/*
 * OpenGL 1.2 API
 */

</xsl:text>

<xsl:apply-templates select="function"/>
</xsl:template>

<!-- opengl 1.3 -->
<xsl:template match="key('gl_version','1.3')">
<xsl:text>
/*
 * OpenGL 1.3 API
 */

</xsl:text>

<xsl:apply-templates select="function"/>
</xsl:template>

<!-- opengl 1.4 -->
<xsl:template match="key('gl_version','1.4')">
<xsl:text>
/*
 * OpenGL 1.4 API
 */

</xsl:text>

<xsl:apply-templates select="function"/>
</xsl:template>

<!-- opengl 1.5 -->
<xsl:template match="key('gl_version','1.5')">
<xsl:text>
/*
 * OpenGL 1.5 API
 */

</xsl:text>

<xsl:apply-templates select="function"/>
</xsl:template>

<xsl:template match="glext">
<xsl:text>
/* </xsl:text><xsl:value-of select="@name"/><xsl:text> */
</xsl:text>
<xsl:apply-templates select="function"/>
</xsl:template>


<xsl:template match="function">

<xsl:choose>
	<xsl:when test="args">
		<xsl:apply-templates select="args"/>
	</xsl:when>
	<xsl:otherwise>
		<xsl:choose>
			<xsl:when test="return">
				<xsl:value-of select="return"/><xsl:text> (*gl</xsl:text>
			</xsl:when>
			<xsl:otherwise>
				<xsl:text>void (*gl</xsl:text>
			</xsl:otherwise>
		</xsl:choose>
		<xsl:value-of select="name"/>
		<xsl:text>)(void);
</xsl:text>
	</xsl:otherwise>
</xsl:choose>
</xsl:template>


<xsl:template match="args">
<xsl:choose>
	<xsl:when test="../return">
		<xsl:value-of select="../return"/><xsl:text> (*gl</xsl:text>
		<xsl:value-of select="../name"/>
	</xsl:when>
	<xsl:otherwise>
		<xsl:text>void (*gl</xsl:text>
		<xsl:value-of select="../name"/>
	</xsl:otherwise>
</xsl:choose>
	
<xsl:if test="@suffix">
	<xsl:value-of select="@suffix"/>
</xsl:if>

<xsl:text>)(</xsl:text>
<xsl:for-each select="arg">
<xsl:value-of select="type"/>
<xsl:text> </xsl:text>
<xsl:value-of select="name"/>
<xsl:if test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>)</xsl:text>

<xsl:text>;
</xsl:text>
</xsl:template>



</xsl:stylesheet>
